        TITL DAI FIRMWARE CD8B-CF01  V1.0  Rev.1
        ORG   :CD8B
*
*
*
*****************************************
* POINTERS TO STRINGS OF BASIC COMMANDS *
*****************************************
*
* This table, with base at CC08, is used for
* printing the Basic instructions during a
* listing.
*
* From the TOKEN, the address in this table can
* be found by:
*      CC08 + 3x TOKEN = address in table
* This is done by a routine on 0ECCC.
*
* The address given points to the memory location
* on which the particular string can be found.
*
* The data byte after the address is an offset
* with base at 0ECF8. Therewith the instructions
* can be found about what to print after the
* Basic statement (when performing LIST).
*
CDTAB   DBL   :CBBF     NEW
        DATA  :00
*
        DBL   :CBC6     CONT
        DATA  :00
*
        DBL   :CBCE     STOP
        DATA  :00
*
        DBL   :CBD6     END
        DATA  :00
*
        DBL   :CBDD     RESTORE
        DATA  :00
*
        DBL   :CBE8     RETURN
        DATA  :00
*
        DBL   :CBF2     RUN
        DATA  :00
*
        DBL   :CBF2     RUN
        DATA  :01
*
        DBL   :CBF9     GOTO
        DATA  :01
*
        DBL   :CC01     GOSUB
        DATA  :01
*
        DBL   :CD1B     LOAD
        DATA  :04
*
        DBL   :CD23     SAVE
        DATA  :04
*
        DBL   :CD2B     CHECK
        DATA  :00
*
        DBL   :CC23     OUT
        DATA  :05
*
        DBL   :CC2A     POKE
        DATA  :05
*
        DBL   :CC32     WAIT
        DATA  :0A
*
        DBL   :CD78     WAIT MEM
        DATA  :0A
*
        DBL   :CD81     WAIT TIME
        DATA  :04
*
        DBL   :CC3A     LIST
        DATA  :00
*
        DBL   :CC3A     LIST
        DATA  :01
*
        DBL   :CC3A     LIST
        DATA  :0B
*
        DBL   :CC4A     SOUND
        DATA  :0C
*
        DBL   :CC53     NOISE
        DATA  :0D
*
        DBL   :CC5C     ENVELOPE
        DATA  :0E
*
        DBL   :CC68     CURSOR
        DATA  :05
*
        DBL   :CC72     MODE
        DATA  :0F
*
        DBL   :CC7A     DOT
        DATA  :07
*
        DBL   :CC81     DRAW
        DATA  :08
*
        DBL   :CC89     FILL
        DATA  :08
*
        DBL   :CC91     COLORT
        DATA  :09
*
        DBL   :CC9B     COLORG
        DATA  :09
*
        DBL   :CCA5     INPUT
        DATA  :11
*
        DBL   :CCA5     INPUT
        DATA  :10
*
        DBL   :CCAE     DATA
        DATA  :03
*
        DBL   :CCB6     READ
        DATA  :11
*
        DBL   :CCBE     LET
        DATA  :13
*
        DBL   :0000     Assignment (= LET)
        DATA  :13
*
        DBL   :CCC5     IF
        DATA  :14
*
        DBL   :CCC5     IF
        DATA  :15
*
        DBL   :CCC5     IF
        DATA  :16
*
        DBL   :CCCB     REM
        DATA  :03
*
        DBL   :CCD2     FOR
        DATA  :17
*
        DBL   :CCD9     NEXT
        DATA  :00
*
        DBL   :CCD9     NEXT
        DATA  :18
*
        DBL   :CCE1     PRINT
        DATA  :19
*
        DBL   :CCEF     ON
        DATA  :1A
*
        DBL   :CCEF     ON
        DATA  :1B
*
        DBL   :CCF5     DIM
        DATA  :11
*
        DBL   :CCFC     '***'
        DATA  :03
*
        DBL   :CD03     UT
        DATA  :00
*
        DBL   :CD09     CALLM
        DATA  :1C
*
        DBL   :CD12     CLEAR
        DATA  :04
*
        DBL   :0000     IMP
        DATA  :00
*
        DBL   :CC3A     LIST
        DATA  :00
*
        DBL   :CC3A     LIST
        DATA  :01
*
        DBL   :CC3A     LIST
        DATA  :0B
*
        DBL   :CC11     SAVEA
        DATA  :1E
*
        DBL   :CC1A     LOADA
        DATA  :1E
*
        DBL   :CD56     TALK
        DATA  :04
*
        DBL   :CD3D     STEP
        DATA  :00
*
        DBL   :CD45     TRON
        DATA  :00
*
        DBL   :CD4D     TROFF
        DATA  :00
*
*****************************
* part of Run 'TALK' (CD6D) *
*****************************
*
* Set frequencies of channels 0,1 or 2.
*
RTK60   MOV   E,A       Code in E (=lobyte
 REM osc. addr)
        MVI   D,:FC
        MOV   A,M       Get 1st byte freq.code
        STAX  D         into osc.
        INX   H
        MOV   A,M       Get 2nd byte freq.code
        STAX  D         into osc.
        JMP   :EA47     (0) Handle next code
*
        DATA  :FF
*
****************************
* GET (M+1) IN E, ZERO M+1 *
****************************
*
* Part of EARRAY (CB5B).
*
* Entry: HL points to M.
* Exit:  HL points to M+1. (M+1) in E.
*        AFBCD preserved.
*
MPT09   INX   H
        MOV   E,M
        MVI   M,:00
        RET
*
***************
* STRING DATA *
***************
*
MSPACE  DATA  :05
        DATA  :53       S
        DATA  :50       P
        DATA  :41       A
        DATA  :43       C
        DATA  :45       E
*
***************************
* part of RUN DIM (0E639) *
***************************
*
MPT41   DCX   H
        JMP   :CB5B     Erase array if exists
*
**********************************
* GET TABNUMBER IN L, DOUTC IN A *
**********************************
*
* Part of Run 'TAB'.
*
MPT50   CALL  :E71D     (0) Get nr of tabs in A
        MOV   L,A       save it in L
        LDA   :0131     Get output direction
        RET
*
****************************************
* PRINT EXPRESSION FOLLOWED BY A SPACE *
****************************************
*
* Entry SCHSP frequently used to print a space.
*
LC230   CALL  :EEA2     (0) Print expression
SCHSP   MVI   A,:20
        JMP   :DD60     Print space
*
*************
* PRINT ',' *
*************
*
* Entry: None.
* Exit:  FBCDEHL preserved.
*
SCHCO   MVI   A,:2C
        JMP   :DD60     Print ','
*
*********************************
* PRINT A STRING BETWEEN SPACES *
*********************************
*
* Entry: Pointer to stringpointer on stack.
* Exit:  BC preserved. AFDEHL corrupted.
*
STXSS   CALL  :CE6B     Print space
STXTS   XTHL            Get stringpntr from stack
        MOV   E,M       ) Store addr string in DE
        INX   H         )
        MOV   D,M       )
        INX   H         )
        XTHL            Addr after pntr on stack
        XCHG            Addr string in HL
        CALL  :DB32     Print string pointed by HL
        JMP   :CE6B     Print space
*
*****************************
* EDIT: PRINT TEXT COMPLETE *
*****************************
*
LC216   CALL  :EF17     (2) Print text complete
        JMP   :E138     (2) Popall, ret
*
********************************
* LIST ARRAY NAME - (not used) *
********************************
*
LC217   PUSH  D
        CALL  :EEF7     (0) List array name
        POP   D
        RET
*
****************
* part of C6BA *
****************
*
LC196   PUSH  H
        JMP   :E92D     (2) Now set up screen bits
 REM for mode 1
*
**************
* (not used) *
**************
*
LC218   LDA   :00A2     Get startaddr edit buffer
        JMP   :E97C     (0)
*
***************************
* CONVERT MACC FOR OUTPUT *
***************************
*
* The MACC contents is converted from FPT to ASCII.
*
* Exit: AF corrupted, BCDEHL preserved.
*
FBCP    CALL  :C021     Convert FPT nr for output
        PUSH  B
        MVI   B,:01     Cannot trim last dec.place
        JMP   :DB65     Tidy up into external form
*
*********************
* LIST CURRENT LINE *
*********************
*
* Lists a program line if trace flag set.
* Part of CBF5.
*
MPT06   DCX   B
        CALL  :DD55     Cursor to begin next line
        JMP   :ECAB     (0) List current line
*
LC219   POP   D         (Not used)
        RET
*
************************
* part of SMKRM (CA01) *
************************
*
MPT07   POP   D         Return, CY=1
        POP   PSW
        STC
        RET
*
MPT08   POP   PSW       Return, CY=0
        STC
        CMC
        RET
*
**********************
* CHANGE SCREEN MODE *
**********************
*
* Part of Run 'MODE' (0E5BB).
*
* Entry: New mode in A.
*
MPT40   RST   5         Change mode
        DATA  :18
        JC    :DA10     If insufficient memory:
 REM error 'OUT OF MEMORY'.
        RET
*
*****************************
* part of RUN CLEAR (0E6B5) *
*****************************
*
* Checks if more than 4 bytes are cleared.
*
* Entry: HL: Number of bytes to be cleared.
*        F : flags on hibyte HL.
*
MPT43   LXI   D,:0004   Must be at least 4 bytes
        CP    :DE14     Compare HL-DE if not >32k
        JC    :DA15     Run error 'NUMBER OUT
 REM OF RANGE' if < 4.
        RET
*
        DATA  :FF
*
**********************************
* SET HEAP SIZE TO DEFAULT VALUE *
**********************************
*
* Part of emergency stop routine (CA25).
* Also runs a NEW command.
*
HRNEW   LXI   H,:0100
        SHLD  :029D     Store HEAP default value
        JMP   :DEB5     Run 'NEW'
*
*************************************
* RE-ORGANISE SCREEN AFTER 'DAI-PC' *
*************************************
*
* Lines after 'DAI PERSONAL COMPUTER' are set in
* unit colour mode.
* Set line mode byte to 7F and first char.
* byte to 20, colour 00 during screen init.
*
* Entry: HL line mode byte of part. line.
*
MPT04   MVI   M,:7F     Wide char line contr byte
        DCX   H
        DCX   H
        MVI   M,:20     Load space
        DCX   H
        MVI   M,:00     Colour no change
        DCX   H
        RET
*
****************************************
* part of RUN 'WAIT(TIME)' (DFD5/DFF7) *
****************************************
*
REX1D   DCX   B
        JMP   :E71D     (0) Get value of argument
 REM in A (max. FF)
*
********************************************
* EVALUATE ARGUMENTS IN NUMERIC EXPRESSION *
********************************************
*
* Not used.
*
LC231   PUSH  PSW
        CALL  :E819     (0) Evaluate arguments
        POP   PSW
        RET
*
************************************
* SELECT ROM BANK 0; PRINT MESSAGE *
************************************
*
* When CEE4 is called, the 2 bytes following
* the CALL-instruction indicate the message to
* be printed by the routine DAFF.
*
SELB0   LDA   :0040     Get POROM
        ANI   :3F       Select ROM bank 0
        STA   :0040     Set POROM
        STA   :FD06     and PORO
        JMP   :DAFF     Print message
*
****************************************
* EDIT: RETURN FROM 'DELETE CHARACTER' *
****************************************
*
* Part of 2EFCC.
*
LC232   POP   H
        CALL  :E330     (2) Put cursor on screen
        JMP   :EF95     (2) Popall, ret, Cy=1
*
*****************************************
* PRINT 'COMPUTER' UNDER 'DAI PERSONAL' *
*****************************************
*
* Part of RESET (C751).
* During screen initialisation used to set a
* new line mode byte between both parts of the
* message. Line colour bytes are set for medium
* resolution.
*
* Entry: HL: line mode byte to be changed.
*        DE: offset for calculation next
*            line mode byte.
* Exit:  HL: next line mode byte.
*
MPT03   MVI   M,:5F     Set line mode byte
        DCX   H
        MVI   M,:40     Set line colour byte
        INX   H
        DAD   D         Addr. next line mode byte
        RET
*
        DATA  :FF
*
*
*
        END
